-
Notifications
You must be signed in to change notification settings - Fork 62
First pass at addressing cross-compiler compatibility in MISRA 2023. #884
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
First pass at addressing cross-compiler compatibility in MISRA 2023. #884
Conversation
Handles clang findings and gcc findings. Many issues were merely updates to the test cases, however, additional work has been done to properly handle tgmath.h and stdatomic.h macros across gcc and clang results.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR addresses various cross-compiler issues related to MISRA 2023 compliance by adjusting test cases and fixing macro-related test behaviors. Key changes include updates to variably-modified array declarations, correction of memset argument orders, and standardization of main() signatures across tests.
Reviewed Changes
Copilot reviewed 30 out of 41 changed files in this pull request and generated 3 comments.
Show a summary per file
File | Description |
---|---|
c/misra/test/rules/RULE-18-8/test.c | Adjusted VLA array parameter declaration to include dimension size. |
c/misra/test/rules/RULE-18-10/test.c | Updated array declarations and removed an invalid array initialization assignment. |
c/misra/test/rules/RULE-17-11/test.c | Corrected main() signature to standard format. |
c/misra/test/rules/RULE-12-6/test.c | Corrected memset argument order to (destination, value, size) in multiple locations. |
c/misra/test/rules/DIR-5-3/test.c | Updated main() signature for proper standard compliance. |
c/misra/test/rules/DIR-5-1/test.c | Updated main() signature to comply with standard signature requirements. |
c/common/test/rules/functionnoreturnattributecondition/test.c | Minor formatting update in the default case of a switch statement. |
Files not reviewed (11)
- c/common/src/codingstandards/c/TgMath.qll: Language not supported
- c/misra/src/rules/RULE-13-2/UnsequencedAtomicReads.ql: Language not supported
- c/misra/src/rules/RULE-21-22/TgMathArgumentWithInvalidEssentialType.ql: Language not supported
- c/misra/src/rules/RULE-21-23/TgMathArgumentsWithDifferingStandardType.ql: Language not supported
- c/misra/src/rules/RULE-21-25/InvalidMemoryOrderArgument.ql: Language not supported
- c/misra/src/rules/RULE-9-7/UninitializedAtomicObject.ql: Language not supported
- c/misra/test/rules/RULE-1-5/UseOfObsoleteMacroAtomicVarInit.expected.gcc: Language not supported
- c/misra/test/rules/RULE-11-10/test.c.clang: Language not supported
- c/misra/test/rules/RULE-12-6/test.c.clang: Language not supported
- c/misra/test/rules/RULE-13-2/UnsequencedAtomicReads.expected: Language not supported
- c/misra/test/rules/RULE-13-2/UnsequencedAtomicReads.expected.gcc: Language not supported
Comments suppressed due to low confidence (1)
c/misra/test/rules/RULE-18-10/test.c:75
- The assignment of a pointer to initialize an array is invalid. The change to remove the assignment helps prevent compilation errors.
int l6[10] = p23;
@@ -28,8 +28,8 @@ void f1() { | |||
atomic_store(&s1_atomic_ptr, l2); // COMPLIANT | |||
|
|||
// Undefined behavior, but not banned by this rule. | |||
memset(&atomic_s1, sizeof(atomic_s1), 0); // COMPLIANT | |||
memset(ptr_atomic_s1, sizeof(*ptr_atomic_s1), 0); // COMPLIANT | |||
memset(&atomic_s1, 0, sizeof(atomic_s1)); // COMPLIANT |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The memset argument order was corrected to (destination, value, size) to ensure proper memory initialization.
Copilot is powered by AI, so mistakes are possible. Review output carefully before use.
memset(&atomic_s1, sizeof(atomic_s1), 0); // COMPLIANT | ||
memset(ptr_atomic_s1, sizeof(*ptr_atomic_s1), 0); // COMPLIANT | ||
memset(&atomic_s1, 0, sizeof(atomic_s1)); // COMPLIANT | ||
memset(ptr_atomic_s1, 0, sizeof(*ptr_atomic_s1)); // COMPLIANT |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The corrected memset parameters improve clarity and correctness in pointer dereferencing for memory initialization.
memset(ptr_atomic_s1, 0, sizeof(*ptr_atomic_s1)); // COMPLIANT | |
atomic_store(ptr_atomic_s1, (s1){0}); // COMPLIANT |
Copilot is powered by AI, so mistakes are possible. Review output carefully before use.
@@ -53,7 +53,7 @@ void f1() { | |||
|
|||
// All OK: not an atomic struct, but rather an atomic pointer to non-atomic | |||
// struct. | |||
memset(s1_atomic_ptr, sizeof(*s1_atomic_ptr), 0); // COMPLIANT | |||
memset(s1_atomic_ptr, 0, sizeof(*s1_atomic_ptr)); // COMPLIANT |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updating the memset argument order here ensures consistency with standard usage and prevents potential errors in memory setting.
Copilot is powered by AI, so mistakes are possible. Review output carefully before use.
Confirmed that new MISRA C rules are passing in CI/CD for gcc and clang at this ref. |
Handles clang findings and gcc findings.
Many issues were merely updates to the test cases, however, additional work has been done to properly handle tgmath.h and stdatomic.h macros across gcc and clang results.
Description
please enter the description of your change here
Change request type
.ql
,.qll
,.qls
or unit tests)Rules with added or modified queries
DIR-4-15
,RULE-9-7
,RULE-13-2
,RULE-21-22
,RULE-21-23
,RULE-21-25
Release change checklist
A change note (development_handbook.md#change-notes) is required for any pull request which modifies:
If you are only adding new rule queries, a change note is not required.
Author: Is a change note required?
🚨🚨🚨
Reviewer: Confirm that format of shared queries (not the .qll file, the
.ql file that imports it) is valid by running them within VS Code.
Reviewer: Confirm that either a change note is not required or the change note is required and has been added.
Query development review checklist
For PRs that add new queries or modify existing queries, the following checklist should be completed by both the author and reviewer:
Author
As a rule of thumb, predicates specific to the query should take no more than 1 minute, and for simple queries be under 10 seconds. If this is not the case, this should be highlighted and agreed in the code review process.
Reviewer
As a rule of thumb, predicates specific to the query should take no more than 1 minute, and for simple queries be under 10 seconds. If this is not the case, this should be highlighted and agreed in the code review process.